<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="lVRaC" id="lVRaC"><span data-lake-id="u1c10a3ba" id="u1c10a3ba">面试者背景</span></h1>
  <p data-lake-id="ua7be22c0" id="ua7be22c0"><br></p>
  <p data-lake-id="u9d5d45e6" id="u9d5d45e6"><span data-lake-id="ud5d0edeb" id="ud5d0edeb" class="lake-fontsize-12">23年毕业，项目是电商运营平台，主要技术mysql，mq，redis，负责过账单模块，</span></p>
  <p data-lake-id="uc0243ce1" id="uc0243ce1"><span data-lake-id="u6d95bd64" id="u6d95bd64" class="lake-fontsize-12">​</span><br></p>
  <h2 data-lake-id="Fu8jU" id="Fu8jU"><span data-lake-id="u0b9bc7ee" id="u0b9bc7ee" class="lake-fontsize-12">面试过程</span></h2>
  <p data-lake-id="ua6a387a6" id="ua6a387a6"><span data-lake-id="ua639b966" id="ua639b966" class="lake-fontsize-12">​</span><br></p>
  <blockquote data-lake-id="u9afe6761" id="u9afe6761" class="lake-alert lake-alert-warning">
   <p data-lake-id="ue066a78f" id="ue066a78f" style="text-align: left"><span data-lake-id="u70ca53d4" id="u70ca53d4" class="lake-fontsize-12">拉取订单数据，怎么保证订单不重复？insert or update ?</span></p>
   <p data-lake-id="u97b51ae2" id="u97b51ae2" style="text-align: left"><span data-lake-id="uf548c2c9" id="uf548c2c9" class="lake-fontsize-12">insert or update</span><span data-lake-id="u2884e41e" id="u2884e41e" class="lake-fontsize-12">的</span><span data-lake-id="u7698fa94" id="u7698fa94" class="lake-fontsize-12">SQL</span><span data-lake-id="u3021bd67" id="u3021bd67" class="lake-fontsize-12">怎么写的？</span><span data-lake-id="ue82f45b1" id="ue82f45b1" class="lake-fontsize-12">insert into on duplicate key update </span><span data-lake-id="uf8b68de7" id="uf8b68de7" class="lake-fontsize-12">的限制是什么？有影响吗？会有额外的加锁吗？</span></p>
   <p data-lake-id="uc6b02e29" id="uc6b02e29" style="text-align: left"><span data-lake-id="u3702a39f" id="u3702a39f" class="lake-fontsize-12">每天的订单量有多少？</span></p>
   <p data-lake-id="ua8552aa4" id="ua8552aa4" style="text-align: left"><span data-lake-id="uf7424edf" id="uf7424edf" class="lake-fontsize-12">项目的难点是什么？订单匹配，正则匹配。正则表达式判断字符串是不是邮箱怎么写？</span></p>
   <p data-lake-id="u5530a553" id="u5530a553" style="text-align: left"><span data-lake-id="ue6c3fe29" id="ue6c3fe29" class="lake-fontsize-12">MQ</span><span data-lake-id="ubf1e9435" id="ubf1e9435" class="lake-fontsize-12">使用场景？异步导出，发</span><span data-lake-id="uff83e08f" id="uff83e08f" class="lake-fontsize-12">MQ</span><span data-lake-id="u2fd8e7d4" id="u2fd8e7d4" class="lake-fontsize-12">的应用和接</span><span data-lake-id="u1a3c0344" id="u1a3c0344" class="lake-fontsize-12">MQ</span><span data-lake-id="ubf6cf5c5" id="ubf6cf5c5" class="lake-fontsize-12">是同一个应用吗？不用</span><span data-lake-id="u98a14f75" id="u98a14f75" class="lake-fontsize-12">MQ</span><span data-lake-id="u1c02c799" id="u1c02c799" class="lake-fontsize-12">不行吗？线程池不行吗？</span></p>
   <p data-lake-id="ud26ceda1" id="ud26ceda1" style="text-align: left"><span data-lake-id="u6db9b28c" id="u6db9b28c" class="lake-fontsize-12">Rabbitmq</span><span data-lake-id="u62bc82e1" id="u62bc82e1" class="lake-fontsize-12">的整体架构介绍一下。</span><span data-lake-id="ub97abb21" id="ub97abb21" class="lake-fontsize-12">Exchange</span><span data-lake-id="u048492fc" id="u048492fc" class="lake-fontsize-12">起到的作用是什么？转发路由。</span></p>
   <p data-lake-id="u7914cd1f" id="u7914cd1f" style="text-align: left"><span data-lake-id="u9c4a49b4" id="u9c4a49b4" class="lake-fontsize-12">RabbitMQ</span><span data-lake-id="u4e81e39d" id="u4e81e39d" class="lake-fontsize-12">消息的一次生成</span><span data-lake-id="u4980df4d" id="u4980df4d" class="lake-fontsize-12">&amp;</span><span data-lake-id="ubbf64695" id="ubbf64695" class="lake-fontsize-12">消费的流程是怎么样的？</span></p>
   <p data-lake-id="uc3d2726d" id="uc3d2726d" style="text-align: left"><span data-lake-id="u743f3366" id="u743f3366" class="lake-fontsize-12">死信队列用过吗？死信队列的消息需要走</span><span data-lake-id="u705e301b" id="u705e301b" class="lake-fontsize-12">exchange</span><span data-lake-id="u61ef4cd2" id="u61ef4cd2" class="lake-fontsize-12">吗？死信队列可以做什么？延迟消息。</span></p>
   <p data-lake-id="u65a11dbc" id="u65a11dbc" style="text-align: left"><span data-lake-id="u783a9176" id="u783a9176" class="lake-fontsize-12">Rabbitmq</span><span data-lake-id="ubee87305" id="ubee87305" class="lake-fontsize-12">和</span><span data-lake-id="ua8a16ade" id="ua8a16ade" class="lake-fontsize-12">KAFKA</span><span data-lake-id="u390aa186" id="u390aa186" class="lake-fontsize-12">区别？</span><span data-lake-id="u58d67688" id="u58d67688" class="lake-fontsize-12">kafka</span><span data-lake-id="u6559f8dd" id="u6559f8dd" class="lake-fontsize-12">一定不丢消息吗？</span><span data-lake-id="uc7404e67" id="uc7404e67" class="lake-fontsize-12">rabbitmq</span><span data-lake-id="uda887c81" id="uda887c81" class="lake-fontsize-12">能保证不丢吗？</span></p>
   <p data-lake-id="ub0fc2408" id="ub0fc2408" style="text-align: left"><span data-lake-id="u032681f8" id="u032681f8" class="lake-fontsize-12">线程池用过吗？线程池都有哪些类型？线程池的核心参数，拒绝策略有哪些，如何选择？</span></p>
   <p data-lake-id="u0844375d" id="u0844375d" style="text-align: left"><span data-lake-id="ubb9be3f1" id="ubb9be3f1" class="lake-fontsize-12">线程池核心和最大线程数如何设定的？向线程池提交一个任务的处理流程是怎么样的？</span></p>
   <p data-lake-id="ua506d02e" id="ua506d02e" style="text-align: left"><span data-lake-id="u1e77e888" id="u1e77e888" class="lake-fontsize-12">Java</span><span data-lake-id="u1dc20a8b" id="u1dc20a8b" class="lake-fontsize-12">中线程有几个状态？</span><span data-lake-id="ud3a46332" id="ud3a46332" class="lake-fontsize-12">waiting</span><span data-lake-id="u231f3810" id="u231f3810" class="lake-fontsize-12">和</span><span data-lake-id="uaca64bd0" id="uaca64bd0" class="lake-fontsize-12">timed wating</span><span data-lake-id="u2132dace" id="u2132dace" class="lake-fontsize-12">区别。什么时候会进入</span><span data-lake-id="u16497ee9" id="u16497ee9" class="lake-fontsize-12">timed waiting</span></p>
   <p data-lake-id="u86ad5f99" id="u86ad5f99" style="text-align: left"><span data-lake-id="uf650cf46" id="uf650cf46" class="lake-fontsize-12">线程的</span><span data-lake-id="uf783e918" id="uf783e918" class="lake-fontsize-12">start</span><span data-lake-id="uffe1952b" id="uffe1952b" class="lake-fontsize-12">方法和</span><span data-lake-id="u67a36f20" id="u67a36f20" class="lake-fontsize-12">run</span><span data-lake-id="u8f918647" id="u8f918647" class="lake-fontsize-12">方法区别是什么？</span><span data-lake-id="uf6bac788" id="uf6bac788" class="lake-fontsize-12"> </span></p>
   <p data-lake-id="u9f036d8d" id="u9f036d8d" style="text-align: left"><span data-lake-id="u62c38d68" id="u62c38d68" class="lake-fontsize-12">如何在主线程中等子线程执行完？</span><span data-lake-id="u29f515f3" id="u29f515f3" class="lake-fontsize-12">wait</span><span data-lake-id="uca7adae0" id="uca7adae0" class="lake-fontsize-12">？</span></p>
   <p data-lake-id="ucaf9c7ee" id="ucaf9c7ee" style="text-align: left"><span data-lake-id="uf6905d2c" id="uf6905d2c" class="lake-fontsize-12">Completablefuture</span><span data-lake-id="uc0db8147" id="uc0db8147" class="lake-fontsize-12">什么地方用到了？性能提升的原因是什么？编排。</span></p>
   <p data-lake-id="u3db80bc0" id="u3db80bc0" style="text-align: left"><span data-lake-id="u1e719e51" id="u1e719e51" class="lake-fontsize-12">Completablefuture</span><span data-lake-id="u2c2c71d2" id="u2c2c71d2" class="lake-fontsize-12">实现原理？</span><span data-lake-id="ub838bc53" id="ub838bc53" class="lake-fontsize-12">ForkJoinPool</span><span data-lake-id="u0020c921" id="u0020c921" class="lake-fontsize-12">是啥？</span></p>
   <p data-lake-id="u0a597488" id="u0a597488" style="text-align: left"><span data-lake-id="ud27cb9d8" id="ud27cb9d8" class="lake-fontsize-12">AOP</span><span data-lake-id="u30801056" id="u30801056" class="lake-fontsize-12">切面实现多数据源切换介绍一下？</span></p>
   <p data-lake-id="ua1193a78" id="ua1193a78" style="text-align: left"><span data-lake-id="u3005c524" id="u3005c524" class="lake-fontsize-12">金额的存储是怎么存的，</span><span data-lake-id="u79dd13c5" id="u79dd13c5" class="lake-fontsize-12">decimal</span><span data-lake-id="u2794c979" id="u2794c979" class="lake-fontsize-12">多少位？如何判断两个</span><span data-lake-id="u3c0b5c12" id="u3c0b5c12" class="lake-fontsize-12">BigDecimal</span><span data-lake-id="ueee8f030" id="ueee8f030" class="lake-fontsize-12">是否相等，为啥不用</span><span data-lake-id="u2cb5d5bc" id="u2cb5d5bc" class="lake-fontsize-12">equals</span><span data-lake-id="u364ba726" id="u364ba726" class="lake-fontsize-12">方法？</span></p>
   <p data-lake-id="uf4c5609f" id="uf4c5609f" style="text-align: left"><span data-lake-id="ua30630aa" id="ua30630aa" class="lake-fontsize-12">Bigdecimal</span><span data-lake-id="uffb9669e" id="uffb9669e" class="lake-fontsize-12">如何做四舍五入？</span><span data-lake-id="u77f97741" id="u77f97741" class="lake-fontsize-12">bigdecimal</span><span data-lake-id="ue8f7fe56" id="ue8f7fe56" class="lake-fontsize-12">传给前端出现科学计数法怎么回事？</span><span data-lake-id="ud972d16b" id="ud972d16b" class="lake-fontsize-12">bigdecimal</span><span data-lake-id="ued8a31f4" id="ued8a31f4" class="lake-fontsize-12">转字符串？</span><span data-lake-id="ud9bd0cf8" id="ud9bd0cf8" class="lake-fontsize-12">toString</span><span data-lake-id="u57259773" id="u57259773" class="lake-fontsize-12">？为啥不用</span><span data-lake-id="uac89670d" id="uac89670d" class="lake-fontsize-12">double</span><span data-lake-id="u9e48a133" id="u9e48a133" class="lake-fontsize-12">和</span><span data-lake-id="u131b55a5" id="u131b55a5" class="lake-fontsize-12">float</span><span data-lake-id="u32a42f60" id="u32a42f60" class="lake-fontsize-12">？为啥他们会丢失精度？用</span><span data-lake-id="uba91ee5d" id="uba91ee5d" class="lake-fontsize-12">double</span><span data-lake-id="u64544e05" id="u64544e05" class="lake-fontsize-12">存整数有问题吗？</span></p>
   <p data-lake-id="uc55643a0" id="uc55643a0" style="text-align: left"><span data-lake-id="uacf59c29" id="uacf59c29" class="lake-fontsize-12">为啥有了基本类型还需要包装类？</span><span data-lake-id="uf8107061" id="uf8107061" class="lake-fontsize-12">double Double </span></p>
   <p data-lake-id="u353a841d" id="u353a841d" style="text-align: left"><span data-lake-id="ud6d769c7" id="ud6d769c7" class="lake-fontsize-12">缓存的穿透、击穿和雪崩？</span><span data-lake-id="u0c9308cb" id="u0c9308cb" class="lake-fontsize-12">bloom</span><span data-lake-id="uaacc6dd1" id="uaacc6dd1" class="lake-fontsize-12">过滤器。</span></p>
   <p data-lake-id="u1ec08502" id="u1ec08502" style="text-align: left"><span data-lake-id="u9226dbc9" id="u9226dbc9" class="lake-fontsize-12">分布式锁加锁失败后怎么做的等待？</span></p>
  </blockquote>
  <h1 data-lake-id="FChSX" id="FChSX"><span data-lake-id="ubd560f90" id="ubd560f90" class="lake-fontsize-12">题目解析</span></h1>
  <p data-lake-id="u006a4676" id="u006a4676"><br></p>
  <blockquote data-lake-id="u6899ae75" id="u6899ae75" class="lake-alert lake-alert-color4">
   <p data-lake-id="ubafa47f5" id="ubafa47f5" style="text-align: left"><span data-lake-id="ub55b8e24" id="ub55b8e24" class="lake-fontsize-12">拉取订单数据，怎么保证订单不重复？insert or update ?</span></p>
   <p data-lake-id="u1c156cd2" id="u1c156cd2" style="text-align: left"><span data-lake-id="uadd4c865" id="uadd4c865" class="lake-fontsize-12">insert or update的SQL怎么写的？insert into on duplicate key update 的限制是什么？有影响吗？会有额外的加锁吗？</span></p>
  </blockquote>
  <p data-lake-id="u540cf76b" id="u540cf76b"><br></p>
  <p data-lake-id="ua69ad623" id="ua69ad623"><span data-lake-id="u15c72691" id="u15c72691" class="lake-fontsize-12">因为他的项目中提到了做了订单拉取，所以问了下如何防止重复，本质上还是一个幂等问题。</span></p>
  <p data-lake-id="ude9608dc" id="ude9608dc"><span data-lake-id="u17311bcf" id="u17311bcf" class="lake-fontsize-12">涉及到insert or update的操作，就深入问一下具体用法和实现</span></p>
  <p data-lake-id="u65345e30" id="u65345e30"><span data-lake-id="ud0a9a80a" id="ud0a9a80a" class="lake-fontsize-12">​</span><br></p>
  <p data-lake-id="u9bd01537" id="u9bd01537"><span data-lake-id="ub0ebd939" id="ub0ebd939" class="lake-fontsize-12">​</span><br></p>
  <p data-lake-id="u8ad5b244" id="u8ad5b244"><br></p>
  <p data-lake-id="ud0df906b" id="ud0df906b"><br></p>
  <blockquote data-lake-id="ube305306" id="ube305306" class="lake-alert lake-alert-color4">
   <p data-lake-id="u2c00f5c7" id="u2c00f5c7" style="text-align: left"><span data-lake-id="u00a333b8" id="u00a333b8" class="lake-fontsize-12">项目的难点是什么？订单匹配，正则匹配。正则表达式判断字符串是不是邮箱怎么写？</span></p>
  </blockquote>
  <p data-lake-id="u25d60969" id="u25d60969"><br></p>
  <p data-lake-id="u1e2b0263" id="u1e2b0263"><span data-lake-id="u33a492b3" id="u33a492b3" class="lake-fontsize-12">提到自己项目中写了很多正则表达式，那就随便问一个正则的问题。</span></p>
  <p data-lake-id="u7e13a7e4" id="u7e13a7e4"><span data-lake-id="u99f18899" id="u99f18899" class="lake-fontsize-12">​</span><br></p>
  <p data-lake-id="ud1b5b456" id="ud1b5b456"><span data-lake-id="uc466e14c" id="uc466e14c" class="lake-fontsize-12">邮箱正则验证：</span><code data-lake-id="ubb1a23cd" id="ubb1a23cd"><span data-lake-id="u6e166833" id="u6e166833">^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+. [a-zA-Z]{2,}$</span></code></p>
  <p data-lake-id="ubc43ed37" id="ubc43ed37"><br></p>
  <blockquote data-lake-id="ud1a714df" id="ud1a714df" class="lake-alert lake-alert-color4">
   <p data-lake-id="udd4096fc" id="udd4096fc" style="text-align: left"><span data-lake-id="u7dcc9bdf" id="u7dcc9bdf" class="lake-fontsize-12">MQ使用场景？异步导出，发MQ的应用和接MQ是同一个应用吗？不用MQ不行吗？线程池不行吗？</span></p>
  </blockquote>
  <p data-lake-id="u6a8bba73" id="u6a8bba73"><br></p>
  <p data-lake-id="u9c82f018" id="u9c82f018"><span data-lake-id="u5aef8723" id="u5aef8723">这里是候选人的项目对MQ做了个自发自收，实现一个异步的场景，但是聊下来其实自发自收消息的必要性并没有特别大，完全可以用线程池来做异步，所以项目中的一些方案，需要了解前因后果，要知道为啥一定要这个方案，或者知道这个方案还有什么不足以及替代方案。</span></p>
  <p data-lake-id="u78e2abef" id="u78e2abef"><br></p>
  <p data-lake-id="uebe65334" id="uebe65334"><br></p>
  <blockquote data-lake-id="u8c9effd8" id="u8c9effd8" class="lake-alert lake-alert-color4">
   <p data-lake-id="u3e2d086c" id="u3e2d086c" style="text-align: left"><span data-lake-id="u8d4c32c8" id="u8d4c32c8" class="lake-fontsize-12">Rabbitmq</span><span data-lake-id="u911ac9e8" id="u911ac9e8" class="lake-fontsize-12">的整体架构介绍一下。</span><span data-lake-id="u90b79f4c" id="u90b79f4c" class="lake-fontsize-12">Exchange</span><span data-lake-id="u5c665688" id="u5c665688" class="lake-fontsize-12">起到的作用是什么？转发路由。</span></p>
   <p data-lake-id="ub468899e" id="ub468899e" style="text-align: left"><span data-lake-id="u9e545856" id="u9e545856" class="lake-fontsize-12">RabbitMQ</span><span data-lake-id="u77822a1a" id="u77822a1a" class="lake-fontsize-12">消息的一次生成</span><span data-lake-id="u89da31a3" id="u89da31a3" class="lake-fontsize-12">&amp;</span><span data-lake-id="u7b097b03" id="u7b097b03" class="lake-fontsize-12">消费的流程是怎么样的？</span></p>
   <p data-lake-id="ud34fac3b" id="ud34fac3b" style="text-align: left"><span data-lake-id="u738b5bcf" id="u738b5bcf" class="lake-fontsize-12">死信队列用过吗？死信队列的消息需要走</span><span data-lake-id="uefbf6242" id="uefbf6242" class="lake-fontsize-12">exchange</span><span data-lake-id="uc6e9820d" id="uc6e9820d" class="lake-fontsize-12">吗？死信队列可以做什么？延迟消息。</span></p>
   <p data-lake-id="uc7107cf8" id="uc7107cf8" style="text-align: left"><span data-lake-id="ub6a4b7d3" id="ub6a4b7d3" class="lake-fontsize-12">Rabbitmq和KAFKA区别？kafka一定不丢消息吗？rabbitmq能保证不丢吗？</span></p>
  </blockquote>
  <p data-lake-id="u75b374b2" id="u75b374b2"><br></p>
  <p data-lake-id="u7ea87bb5" id="u7ea87bb5"><br></p>
  <p data-lake-id="u18add32f" id="u18add32f"><br></p>
  <p data-lake-id="uf21f8fc6" id="uf21f8fc6"><br></p>
  <p data-lake-id="u581e44ef" id="u581e44ef"><br></p>
  <blockquote data-lake-id="u7b4314bf" id="u7b4314bf" class="lake-alert lake-alert-color4">
   <p data-lake-id="u9653e839" id="u9653e839" style="text-align: left"><span data-lake-id="u45fa20aa" id="u45fa20aa" class="lake-fontsize-12">线程池用过吗？线程池都有哪些类型？线程池的核心参数，拒绝策略有哪些，如何选择？</span></p>
   <p data-lake-id="u177ea543" id="u177ea543" style="text-align: left"><span data-lake-id="uaef98378" id="uaef98378" class="lake-fontsize-12">线程池核心和最大线程数如何设定的？向线程池提交一个任务的处理流程是怎么样的？</span></p>
  </blockquote>
  <p data-lake-id="ue0c5a9cf" id="ue0c5a9cf"><br></p>
  <p data-lake-id="u28a17675" id="u28a17675"><br></p>
  <p data-lake-id="ua6f6fd4e" id="ua6f6fd4e"><br></p>
  <blockquote data-lake-id="u01280e51" id="u01280e51" class="lake-alert lake-alert-color4">
   <p data-lake-id="ub4ed6830" id="ub4ed6830" style="text-align: left"><span data-lake-id="u1eeaa627" id="u1eeaa627" class="lake-fontsize-12">Java</span><span data-lake-id="u05c31593" id="u05c31593" class="lake-fontsize-12">中线程有几个状态？</span><span data-lake-id="u663b72eb" id="u663b72eb" class="lake-fontsize-12">waiting</span><span data-lake-id="u423ed0d8" id="u423ed0d8" class="lake-fontsize-12">和</span><span data-lake-id="ucf852a4c" id="ucf852a4c" class="lake-fontsize-12">timed wating</span><span data-lake-id="u30c99faa" id="u30c99faa" class="lake-fontsize-12">区别。什么时候会进入</span><span data-lake-id="u4d8d36ff" id="u4d8d36ff" class="lake-fontsize-12">timed waiting</span></p>
   <p data-lake-id="u6ced6761" id="u6ced6761" style="text-align: left"><span data-lake-id="u430c04df" id="u430c04df" class="lake-fontsize-12">线程的</span><span data-lake-id="ubed08f2d" id="ubed08f2d" class="lake-fontsize-12">start</span><span data-lake-id="u2a400c27" id="u2a400c27" class="lake-fontsize-12">方法和</span><span data-lake-id="ua2f33ae9" id="ua2f33ae9" class="lake-fontsize-12">run</span><span data-lake-id="u35530188" id="u35530188" class="lake-fontsize-12">方法区别是什么？</span><span data-lake-id="u64a6ebfe" id="u64a6ebfe" class="lake-fontsize-12"> </span></p>
   <p data-lake-id="u638cedd9" id="u638cedd9" style="text-align: left"><span data-lake-id="ua8d9263a" id="ua8d9263a" class="lake-fontsize-12">如何在主线程中等子线程执行完？wait？</span></p>
  </blockquote>
  <p data-lake-id="u39c5c024" id="u39c5c024"><br></p>
  <p data-lake-id="ueb233203" id="ueb233203"><br></p>
  <p data-lake-id="ucc0ba2a0" id="ucc0ba2a0"><br></p>
  <blockquote data-lake-id="u68aa913d" id="u68aa913d" class="lake-alert lake-alert-color4">
   <p data-lake-id="u731030c1" id="u731030c1" style="text-align: left"><span data-lake-id="ud32e875a" id="ud32e875a" class="lake-fontsize-12">Completablefuture</span><span data-lake-id="u341654e7" id="u341654e7" class="lake-fontsize-12">什么地方用到了？性能提升的原因是什么？编排。</span></p>
   <p data-lake-id="u06bb835f" id="u06bb835f" style="text-align: left"><span data-lake-id="u697d9386" id="u697d9386" class="lake-fontsize-12">Completablefuture实现原理？ForkJoinPool是啥？</span></p>
  </blockquote>
  <p data-lake-id="u1a34cbd0" id="u1a34cbd0"><br></p>
  <p data-lake-id="u056d3ecd" id="u056d3ecd"><br></p>
  <p data-lake-id="ua3257b01" id="ua3257b01"><br></p>
  <blockquote data-lake-id="u3a8d1868" id="u3a8d1868" class="lake-alert lake-alert-color4">
   <p data-lake-id="ud23b39e8" id="ud23b39e8" style="text-align: left"><span data-lake-id="u71d576fd" id="u71d576fd" class="lake-fontsize-12">AOP切面实现多数据源切换介绍一下？</span></p>
  </blockquote>
  <p data-lake-id="u6fe12bce" id="u6fe12bce"><br></p>
  <p data-lake-id="u296524d4" id="u296524d4"><br></p>
  <blockquote data-lake-id="ua0020a4b" id="ua0020a4b" class="lake-alert lake-alert-color4">
   <p data-lake-id="ue37960e3" id="ue37960e3" style="text-align: left"><span data-lake-id="u410f22b5" id="u410f22b5" class="lake-fontsize-12">金额的存储是怎么存的，</span><span data-lake-id="u6dadac66" id="u6dadac66" class="lake-fontsize-12">decimal</span><span data-lake-id="u8bde9e62" id="u8bde9e62" class="lake-fontsize-12">多少位？如何判断两个</span><span data-lake-id="u79e3bd6e" id="u79e3bd6e" class="lake-fontsize-12">BigDecimal</span><span data-lake-id="u5798211a" id="u5798211a" class="lake-fontsize-12">是否相等，为啥不用</span><span data-lake-id="ufd6f2814" id="ufd6f2814" class="lake-fontsize-12">equals</span><span data-lake-id="ua9e56e9d" id="ua9e56e9d" class="lake-fontsize-12">方法？</span></p>
   <p data-lake-id="uccf7df14" id="uccf7df14" style="text-align: left"><span data-lake-id="u6dd7e010" id="u6dd7e010" class="lake-fontsize-12">Bigdecimal</span><span data-lake-id="uf49477ed" id="uf49477ed" class="lake-fontsize-12">如何做四舍五入？</span><span data-lake-id="ue96d9563" id="ue96d9563" class="lake-fontsize-12">bigdecimal</span><span data-lake-id="u00690a97" id="u00690a97" class="lake-fontsize-12">传给前端出现科学计数法怎么回事？</span><span data-lake-id="u80824406" id="u80824406" class="lake-fontsize-12">bigdecimal</span><span data-lake-id="uaf0ec0c5" id="uaf0ec0c5" class="lake-fontsize-12">转字符串？</span><span data-lake-id="u5d705b7d" id="u5d705b7d" class="lake-fontsize-12">toString</span><span data-lake-id="u77e5191f" id="u77e5191f" class="lake-fontsize-12">？为啥不用</span><span data-lake-id="u55fcb6a2" id="u55fcb6a2" class="lake-fontsize-12">double</span><span data-lake-id="uab025022" id="uab025022" class="lake-fontsize-12">和</span><span data-lake-id="u1824f004" id="u1824f004" class="lake-fontsize-12">float</span><span data-lake-id="u461f7239" id="u461f7239" class="lake-fontsize-12">？为啥他们会丢失精度？用</span><span data-lake-id="ubd0d16b7" id="ubd0d16b7" class="lake-fontsize-12">double</span><span data-lake-id="uf2a10818" id="uf2a10818" class="lake-fontsize-12">存整数有问题吗？</span></p>
   <p data-lake-id="ueccefbe8" id="ueccefbe8" style="text-align: left"><span data-lake-id="ue4a85bf6" id="ue4a85bf6" class="lake-fontsize-12">为啥有了基本类型还需要包装类？double Double </span></p>
  </blockquote>
  <p data-lake-id="uacf27a4f" id="uacf27a4f"><br></p>
  <p data-lake-id="u34499df6" id="u34499df6"><br></p>
  <p data-lake-id="uf05667ca" id="uf05667ca"><br></p>
  <p data-lake-id="ub1b5b4bd" id="ub1b5b4bd" style="text-align: left"><br></p>
  <blockquote data-lake-id="u5dcc337a" id="u5dcc337a" class="lake-alert lake-alert-color4">
   <p data-lake-id="ud7918e6d" id="ud7918e6d" style="text-align: left"><span data-lake-id="u61db73bf" id="u61db73bf" class="lake-fontsize-12">缓存的穿透、击穿和雪崩？</span><span data-lake-id="u134732d5" id="u134732d5" class="lake-fontsize-12">bloom</span><span data-lake-id="u001cfa3d" id="u001cfa3d" class="lake-fontsize-12">过滤器。</span></p>
   <p data-lake-id="u7472b12c" id="u7472b12c" style="text-align: left"><span data-lake-id="ubbc729cb" id="ubbc729cb" class="lake-fontsize-12">分布式锁加锁失败后怎么做的等待？</span></p>
  </blockquote>
  <p data-lake-id="u4a949ca5" id="u4a949ca5" style="text-align: left"><br></p>
  <p data-lake-id="u397d66bd" id="u397d66bd"><br></p>
  <p data-lake-id="u3ffc5ec5" id="u3ffc5ec5"><br></p>
  <p data-lake-id="u4dc62724" id="u4dc62724"><span data-lake-id="uc47c2479" id="uc47c2479">分布式锁加锁失败后等待其实是阻塞锁的实现，一般redis实现的都是非阻塞锁。zookeeper更适合实现阻塞锁。</span></p>
  <p data-lake-id="u73466e09" id="u73466e09"><span data-lake-id="uf6caf974" id="uf6caf974">​</span><br></p>
 </body>
</html>